package org.Shiikong_Memory.SakuraBlockFrame.PluginCommunication;

import com.google.gson.Gson;
import lombok.Getter;

/**
 * 该类表示消息负载，包含消息的发送者、接收者、消息类型和消息内容。
 * 同时提供了将对象转换为 JSON 字符串和从 JSON 字符串转换为对象的方法。
 * @author Shiikong_Memory
 * @version 1.0
 */
public class MessagePayload {
    /**
     * 消息发送者的 ID
     */
    @Getter
    private String senderId;
    /**
     * 消息接收者的 ID，如果为广播消息，则不重要
     */
    @Getter
    private String receiverId;
    /**
     * 消息的类型
     */
    @Getter
    private String messageType;
    /**
     * 消息的具体内容
     */
    @Getter
    private String messageContent;

    /**
     * 构造函数，用于初始化消息负载对象。
     *
     * @param senderId 消息发送者的 ID
     * @param receiverId 消息接收者的 ID
     * @param messageType 消息的类型
     * @param messageContent 消息的具体内容
     */
    public MessagePayload(String senderId, String receiverId, String messageType, String messageContent) {
        this.senderId = senderId;
        this.receiverId = receiverId;
        this.messageType = messageType;
        this.messageContent = messageContent;
    }

    /**
     * 将当前消息负载对象转换为 JSON 字符串。
     *
     * @return 表示当前对象的 JSON 字符串
     */
    public String toJson() {
        Gson gson = new Gson();
        return gson.toJson(this);
    }

    /**
     * 从 JSON 字符串解析出消息负载对象。
     *
     * @param json 包含消息负载信息的 JSON 字符串
     * @return 解析后的消息负载对象
     */
    public static MessagePayload fromJson(String json) {
        Gson gson = new Gson();
        return gson.fromJson(json, MessagePayload.class);
    }
}